dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojox.grid.cells.dijit");
dojo.require("dojo.date.stamp");
dojo.require("dojo.date.locale");		
dojo.require("dijit.Tooltip");
dojo.require("dojox.validate");
dojo.require("dijit.Dialog");





function isNumber(n) {
	  return !isNaN(parseFloat(n)) && isFinite(n);
	}


function eventoLoad(id){
	
	//alert(id);
	control.idEvento = id;
	var deferred = dojo.xhrPost({
		
		url: "${pageContext.general.APP_PATH}interno/evento/custo.carregar",
		handleAs: "json",
		content: { 
			"idEvento": id
		
			},
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		load: function(dados){
		
				
			 var storeP = new dojo.data.ItemFileWriteStore({
			        
			    	data: {
			    		
			    		identifier: "idContato",
			    		items: dados.participantes
			    	}
			    	
			    });
			
			 if(dados.gerais.length== 0 ){
				 dados.gerais =  [
		    		        { id: 1, nome: "Infraestrutura", custo: 30.0, idEvento: control.idEvento },
		    		        { id: 2, nome: "Transporte", custo: 100.0,idEvento: control.idEvento},
		    		        ];
				 				 
			 }
				 
			 storeG = new dojo.data.ItemFileWriteStore({
				        
			    	data: {
			    		
			    		identifier: "id",
			    		items: dados.gerais 
			    	}
			    	
			 });
			 
			
			 dijit.byId("dialogCustos").show();
			
			
			dijit.byId("gridCustoParticipantes").setStore(storeP);
			dijit.byId("gridCustosVariaveis").setStore(storeG);
			
			var gridC = dijit.byId("gridCustosVariaveis"); 
			gridC.store.newItem({ id: gridC.getItem(gridC.rowCount-1).id[0]+5, nome: "Novo custo", custo: "",idEvento: control.idEvento});
			 
			
		},
		error: function(data){

			alert(data);
		}		
	});
	
			
}

var control = {};
var contadorSaveCustosParticipantes = 0;
var contadorSaveCustosGerais = 0;
var rowsParticipantes = Array();


function callbackSave(){
	
	//Ideia é diminuir a dependencia dessas variáveis globais.
	if(contadorSaveCustosParticipantes==0 && contadorSaveCustosGerais==0) return;
	contadorSaveCustosParticipantes = 0;
	
	var contadorSaveInterno = 0;
	
	if(contadorSaveCustosGerais!=0){
		contadorSaveInterno = 1;
	}
	contadorSaveCustosGerais = 0;
	
	loadingOverlay.init().show();
	
	contadorSaveCustosParticipantes = 0;
	
	//setTimeout("loadingOverlay.hide()",5000);
	
	var grid = dijit.byId("gridCustoParticipantes");
	var saveParticipants = Array();
	var tam = rowsParticipantes.length;
	for( var i =0;i < tam; i++) {
		
		var key = rowsParticipantes.pop();
		if( key == undefined) continue;
		
		var a = grid.getItem(key);
		var row = {};
		row.deslocamento = a.deslocamento[0];
		row.valorHora = a.valorHora[0];
		row.hospedagem = a.hospedagem[0];
		row.idContato = a.idContato[0];
		row.idEvento = a.idEvento[0];
		row.nome = a.nome[0];
		
		
		saveParticipants.push(row);
			
	}
	
	
	var saveGerais = Array();
	
	if(contadorSaveInterno!=0){
		
		var grid2 = dijit.byId("gridCustosVariaveis");
		for(var i =0;i<grid2.rowCount;i++){
			
			var a = grid2.getItem(i);
			var row = {};
			row.custo = a.custo[0];
			row.nome = a.nome[0];
			row.id = a.id[0];
			row.idEvento = a.idEvento[0];
			
			
			if(row.custo != "")	saveGerais.push(row);
			
		}
		
	}
	
	console.log(saveParticipants);
	console.log(saveGerais);
	
	dojo.xhrPost({
		
		url: "${pageContext.general.APP_PATH}interno/evento/custo.salvar",
		handleAs: "json",
		content: { 
				"rowsParticipantes" : JSON.stringify(saveParticipants),
				"rowsGerais" : JSON.stringify(saveGerais),
				"idEvento": control.idEvento
				
				},
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		load: function(dados){
		
			loadingOverlay.hide();
		
		},
		error: function(data){

			alert(data);
		}		
	});

	
}

function applyEditCellHandler(inValue, inRowIndex, inFieldIndex,e){
	
	
	console.log("Valor:" + inValue + " Linha: "+ inRowIndex+ "inFieldIndex:" + inFieldIndex);
	//dojoStore.save()?
	//applyTimeout()?
	if(this.grid.rowCount == inRowIndex+1 && inFieldIndex=="nome"){
		
		this.grid.store.newItem({ id: this.grid.getItem(inRowIndex).id[0]+1, nome: "Novo custo", custo: "",idEvento: control.idEvento});
		
	}

   if(this.modo=="participantes" && contadorSaveCustosParticipantes== 0){
	   contadorSaveCustosParticipantes= 1;
	   rowsParticipantes[inRowIndex]= inRowIndex;
	   if(contadorSaveCustosGerais ==0){
		   
		   setTimeout("callbackSave()",10000); //dojo.hitch(???).
	   }
	   console.log("waiting for saving");
   }else if(this.modo=="participantes"){
	   
	   if(rowsParticipantes[inRowIndex]== undefined)  rowsParticipantes[inRowIndex]= inRowIndex;
	   
   }else if(this.modo=="gerais" && contadorSaveCustosGerais== 0){
	   contadorSaveCustosGerais= 1;
	   if(contadorSaveCustosParticipantes ==0){
		   
		   setTimeout("callbackSave()",10000); //dojo.hitch(???).
	   }
	   
   }else if(this.modo=="gerais"){

   }
      
	
}




function descricaoFormatter(texto,indice,node){    	    
	
    if( texto.length > 45){
    	return texto.substr(0,45) + "...";
    }
    else{
    	return texto;
    }
	
}

function htmlDecode(input){
	  var e = document.createElement('div');
	  e.innerHTML = input;
	  return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}


function memoriaFormatter(texto,indice,node){
    
	texto = htmlDecode(texto);
	var tip = new dijit.Tooltip({
    	
       	label: "<div style='width:300px'>" + texto + "</div>",
       	"class":"toolTip"
    });     	   
    
    tip.addTarget( node.view.rowNodes[indice] );
    
    if( texto.length > 60){
    	return texto.substr(0,60) + "...";
    }
    else{
    	return texto;
    }
}

function editCostFormatter(texto,indice,node){	
	return "<div style='text-align:center'><a href='#' onclick='eventoLoad("+node.grid.getItem(indice).id[0]+")'><img src='${pageContext.general.APP_PATH}imagens/cost.png' border='0' width='21' height='24'></a></div>";
}

function pdfFormatter(texto,indice,node){	
	return "<div style='text-align:center'><a target='_blank' href='${pageContext.general.APP_PATH}interno/evento.gerarAta?eventoId=" + node.grid.getItem(indice).id[0] + "'><img src='/reuniao/imagens/pdf_list.png' border='0' width='21' height='24'></a></div>";
}

function editFormatter(texto,indice,node){	
	return "<div style='text-align:center'><a href='${pageContext.general.APP_PATH}interno/evento?action=form&eventoId=" + node.grid.getItem(indice).id[0] + "'><img src='/reuniao/imagens/alterar.gif' border='0' width='21' height='24'></a></div>";
}

function removeFormatter(texto,indice,node){	
	return "<div style='text-align:center'><a href='${pageContext.general.APP_PATH}interno/evento?action=delete&eventoId=" + node.grid.getItem(indice).id[0] + "'><img src='/reuniao/imagens/excluir.gif' border='0' width='21' height='24'></a></div>";
}
		

function tituloFormatter(texto,indice,node){
	return texto;
}

function envolvidosFormatter(texto,indice,node){
    if( texto.length > 60){
    	return texto.substr(0,60) + "...";
    }
    else{
    	return texto;
    }
}

function custoFormatter(texto,indice,node){
	
	if(isNumber(texto)) return "$"+dojo.currency.format(texto);
	return "$"+dojo.currency.format(0.0);
	
	
}

function formatDate(datum){
    /*Format the value in store, so as to be displayed.*/
    var d = dojo.date.stamp.fromISOString(datum);
    return dojo.date.locale.format(d, {selector: 'date', formatLength: 'short'});
}


function getDateValue(){
    /*Override the default getValue function for dojox.grid.cells.DateTextBox*/
    return dojo.date.stamp.toISOString(this.widget.get('value'));
}			

function initGrid(json){
	var layout = [
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.data_inicio"]}', field: 'dtInicio', width: '5.5%',
                        formatter: formatDate,  /*Custom format, change the format in store. */
                        editable: true,         /*Editable cell*/
                        type: dojox.grid.cells.DateTextBox, /*Use DateTextBox in editing mode*/
                        //get: getDateValue, /*Translate the value of DateTextBox to something the store can understand.*/
                        constraint: {formatLength: 'long'} /*Format the date value shown in DateTextBox*/
                },
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.hora_inicio"]}', field: 'horaInicio', width: '3.5%'},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.data_fim"]}', field: 'dtFim', width: '5.5%',
                    formatter: formatDate,  /*Custom format, change the format in store. */
                    editable: true,         /*Editable cell*/
                    type: dojox.grid.cells.DateTextBox, /*Use DateTextBox in editing mode*/
                    //get: getDateValue, /*Translate the value of DateTextBox to something the store can understand.*/
                    constraint: {formatLength: 'long'} /*Format the date value shown in DateTextBox*/
                },
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.hora_fim"]}', field: 'horaFim', width: '3.5%'},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.tipo"]}', field: 'tipoEvento', width: '10%',hidden:true},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.titulo"]}', field: 'titulo', width: '20%',formatter:tituloFormatter},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.descricao"]}', field: 'descricao', width: '15%',formatter:descricaoFormatter},
                {name: 'Memória', field: 'memoria', formatter:memoriaFormatter,hidden:true},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.envolvidos"]}', field: 'participantesStr', width: '18%',formatter:envolvidosFormatter},
                {name: '$!{pageContext.idioma["negociacao.eventos.listagem.custo"]}', field: 'custo', width: '5%',formatter:custoFormatter},
                {name: '$!{pageContext.idioma["negociacao.acoes.editar_custo"]}', formatter:editCostFormatter,width:'28px'},
                {name: '$!{pageContext.idioma["negociacao.acoes.editar"]}', formatter:editFormatter,width:'28px'},
                {name: '$!{pageContext.idioma["negociacao.acoes.excluir"]}', formatter:removeFormatter,width:'40px'},
                {name: '$!{pageContext.idioma["negociacao.acoes.ata"]}', formatter:pdfFormatter,width:'22px'}                
        ];				
	
	eval("var itemsList = " + json);
	
	 var store = new dojo.data.ItemFileWriteStore({		 
         data: {
                 identifier: "id",
                 items: itemsList
         }
 	});				
	
	 
    var grid = new dojox.grid.DataGrid({
            id: 'grid',
            store: store,
            structure: layout
    });
    grid.placeAt('gridContainer');
    grid.startup();
    
    
    //Grid dos custos participantes
    
    
    
    /*set up layout*/
    layout = [[
      {'name': 'Nome', 'field': 'nome', 'width': '40%',formatter:tituloFormatter},
      {'name': 'Valor Hora', 'field': 'valorHora', 'width': '20%',formatter: custoFormatter, editable:true},
      {'name': 'Deslocamento', 'field': 'deslocamento', 'width': '20%',formatter: custoFormatter,editable:true},
      {'name': 'Hospedagem', 'field': 'hospedagem', 'width': '20%',formatter: custoFormatter,editable:true}
    ]];
    
    store = new dojo.data.ItemFileWriteStore({
        
    	data: {
    		
    		identifier: "idContato",
    		items: [
    		        { idContato: 0, nome: "", valorHora: 0, deslocamento:0.0,hospedagem:0.0}
    		]
    	}
    	
    });
    
    /*create a new grid:*/
    grid = new dojox.grid.DataGrid({
        id: 'gridCustoParticipantes',
        store: store,
        structure: layout},
      document.createElement('div'));
    
    grid.placeAt("gridCustoParticipantesContainer");
    grid.startup();
    
    dojo.connect(dijit.byId("gridCustoParticipantes"),"onApplyCellEdit",{grid:dijit.byId("gridCustoParticipantes"),modo:"participantes"},applyEditCellHandler);
    
    //Grid dos custos editável
    
    /*set up layout*/
    layout = [[
      {'name': 'Nome', 'field': 'nome', 'width': '70%',formatter:tituloFormatter,editable:true},
      {'name': 'Custo', 'field': 'custo', 'width': '30%',formatter: custoFormatter, editable:true}
    ]];
    
    store = new dojo.data.ItemFileWriteStore({
        
    	data: {
    		
    		identifier: "id",
    		items: [
    		        { id: 1, nome: "Infraestrutura", custo: 30.0},
    		        { id: 2, nome: "Transporte", custo: 100.0},
    		        { id: 3, nome: "Novo custo", custo: ""}
    		        ]
    	}
    	
    });
    
    /*create a new grid:*/
    grid = new dojox.grid.DataGrid({
        id: 'gridCustosVariaveis',
        store: store,
        structure: layout},
      document.createElement('div'));
    
    
    
    dojo.connect(dijit.byId("gridCustosVariaveis"),"onApplyCellEdit",{grid:dijit.byId("gridCustosVariaveis"),modo:"gerais"},applyEditCellHandler);
 
 
    
    grid.placeAt("gridCustosVariaveis");
    grid.startup();

    
    new eneg.GridDialog({
        	
        	title: "Editar Custos",
        	id:"dialogCustos",
        	style:"width:800px;height:500px",
        	class:"janelaModal"}, dojo.byId("divDialogCustos") );
    
}    	   




